package com.example.designpatterns.flyweight;

import java.util.HashMap;
import java.util.Map;

// 享元工厂类 - 负责创建和管理享元对象
public class ShapeFactory {
    // 享元池，使用HashMap存储已创建的享元对象
    private static final Map<String, Shape> shapeMap = new HashMap<>();
    
    // 获取圆形的享元对象
    public static Shape getCircle(String color, int radius) {
        // 创建key以唯一标识一个享元对象
        String key = "Circle:" + color + ":" + radius;
        
        // 检查享元池中是否已存在匹配的享元对象
        Shape shape = shapeMap.get(key);
        
        // 如果不存在，则创建一个新的享元对象并放入享元池
        if (shape == null) {
            shape = new Circle(color, radius);
            shapeMap.put(key, shape);
            System.out.println("创建并缓存新的圆形, key: " + key);
        } else {
            System.out.println("复用已缓存的圆形, key: " + key);
        }
        
        return shape;
    }
    
    // 获取矩形的享元对象
    public static Shape getRectangle(String color, int width, int height) {
        // 创建key以唯一标识一个享元对象
        String key = "Rectangle:" + color + ":" + width + ":" + height;
        
        // 检查享元池中是否已存在匹配的享元对象
        Shape shape = shapeMap.get(key);
        
        // 如果不存在，则创建一个新的享元对象并放入享元池
        if (shape == null) {
            shape = new Rectangle(color, width, height);
            shapeMap.put(key, shape);
            System.out.println("创建并缓存新的矩形, key: " + key);
        } else {
            System.out.println("复用已缓存的矩形, key: " + key);
        }
        
        return shape;
    }
    
    // 获取当前享元池大小
    public static int getShapeCount() {
        return shapeMap.size();
    }
} 